package greentycoon.gui;
import greentycoon.batiment.Batiment;
import greentycoon.batiment.Habitation;
import greentycoon.batiment.Route;
import greentycoon.batiment.CentreRecyclage.CentreRecyclageDechetToxique;
import greentycoon.batiment.CentreRecyclage.CentreRecyclageDechetUsuel;
import greentycoon.batiment.centrale.CentraleCharbon;
import greentycoon.batiment.centrale.CentraleEolienne;
import greentycoon.batiment.centrale.CentraleNucleaire;
import greentycoon.batiment.centrale.CentralePhotovoltaique;
import greentycoon.batiment.decharge.CentreEnfouissementTechnique;
import greentycoon.batiment.decharge.DechargeACielOuvert;
import greentycoon.main.VariablesGlobales;
import greentycoon.ville.Ville;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Panneau extends JPanel implements MouseMotionListener,MouseListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1166857952775245598L;
	private Ville ville;
	private Image housePicture;
	private Image houseWithoutEnergyPicture;
	private Image emptyHousePicture;
	private Image emptyHouseWithoutEnergyPicture;
	private Image grassPicture;
	private Image roadPictureVerticale;
	private Image roadPictureHorizontale;
	private Image roadPictureCarrefour;
	private Image centraleCharbonPicture;
	private Image centraleEoliennePicture;
	private Image centraleNucleairePicture;
	private Image centralePhotovoltaiquePicture;
	private Image dechargeACielOuvertPicture;
	private Image centreEnfouissementTechniquePicture;
	private Image centreRecyclageDechetUsuelPicture;
	private Image imageDeFond;


	private int mx=0, my=0, lmx=0, lmy=0, dx=0, dy=0;
	private int DG,DD,DH,DB;
	private boolean moussePressedBefore = false;
	private int tailleEcranX;
	private int tailleEcranY;
	private int rapportMapMinimap;

	public Panneau(Ville ville, int tailleEcranX, int tailleEcranY, MenuCreation menuCreation) {
		this.ville = ville;
		this.tailleEcranX=tailleEcranX;
		this.tailleEcranY=tailleEcranY;
		addMouseMotionListener(this);
		addMouseListener(this);
		rapportMapMinimap=VariablesGlobales.TAILLE_CASE_X/VariablesGlobales.TAILLE_CASE_X_MINIMAP;
		
		//add(menuCreation);
		
		//menuCreation.setResizable(true);
		

		//les images que contiennent le panel
		initGui();
	}
	
	
		public void initGui(){
		imageDeFond = null;
		try {
			imageDeFond = ImageIO.read(new File("src/greentycoon/gui/map.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		housePicture = null;
		try {
			housePicture = ImageIO.read(new File("src/greentycoon/gui/maison.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		houseWithoutEnergyPicture = null;
		try {
			houseWithoutEnergyPicture = ImageIO.read(new File("src/greentycoon/gui/maisonSansCourant.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		emptyHousePicture = null;
		try {
			emptyHousePicture = ImageIO.read(new File("src/greentycoon/gui/maisonVide.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		emptyHouseWithoutEnergyPicture = null;
		try {
			emptyHouseWithoutEnergyPicture = ImageIO.read(new File("src/greentycoon/gui/maisonVideSansCourant.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		grassPicture = null;
		try {
			grassPicture = ImageIO.read(new File("src/greentycoon/gui/grass.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		roadPictureCarrefour = null;
		try {
			roadPictureCarrefour = ImageIO.read(new File("src/greentycoon/gui/routeCarrefour.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		roadPictureVerticale = null;
		try {
			roadPictureVerticale = ImageIO.read(new File("src/greentycoon/gui/routeVerticale.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		roadPictureHorizontale = null;
		try {
			roadPictureHorizontale = ImageIO.read(new File("src/greentycoon/gui/routeHorizontale.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centraleCharbonPicture = null;
		try {
			centraleCharbonPicture = ImageIO.read(new File("src/greentycoon/gui/centraleCharbon.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centraleEoliennePicture = null;
		try {
			centraleEoliennePicture = ImageIO.read(new File("src/greentycoon/gui/eolienne.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centraleNucleairePicture = null;
		try {
			centraleNucleairePicture = ImageIO.read(new File("src/greentycoon/gui/centraleNucleaire.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centralePhotovoltaiquePicture = null;
		try {
			centralePhotovoltaiquePicture = ImageIO.read(new File("src/greentycoon/gui/centralePhotovoltaique.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		dechargeACielOuvertPicture = null;
		try {
			dechargeACielOuvertPicture = ImageIO.read(new File("src/greentycoon/gui/dechargeACielOuvert.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centreEnfouissementTechniquePicture = null;
		try {
			centreEnfouissementTechniquePicture = ImageIO.read(new File("src/greentycoon/gui/centreEnfouissementTechnique.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		centreRecyclageDechetUsuelPicture = null;
		try {
			centreRecyclageDechetUsuelPicture = ImageIO.read(new File("src/greentycoon/gui/centreRecyclageUsuel.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//initialisation de l'affichage
		DG = 0;
		DH = 0;
		DB = VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y-tailleEcranY;
		DD = VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X-tailleEcranX;

	}

	public void paintComponent(Graphics g){

		// g�n�re un fond noir � chaque fois que l'image est reg�n�r�
		//g.drawImage(imageDeFond, 0, 0, tailleEcranX, tailleEcranY,this);
		//g.drawImage(imageDeFond, 0, 0, VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y, this);
		//g.fillRect(0, 0, VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y);

		
		//calcul l'affichage en fonction du d�placement de la souris
		DG=DG+dx;
		DD=DD-dx;
		if(DG<0) {
			DG=0;
			DD = VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X-tailleEcranX;
		}
		if(DD<0) {
			DD=0;
			DG = VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X-tailleEcranX;
		}
		DH=DH+dy;
		DB=DB-dy;
		if(DH<0) {
			DB=VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y-tailleEcranY;
			DH=0;
		}
		if(DB<0) {
			DH=VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y-tailleEcranY;
			DB=0;
		}

		//translate la nouvelle image g�n�r� en fonction des d�placements de la souris
		g.translate(-DG,-DH);
		
		//System.out.println("DG: "+DG+"; DD: "+DD+"; DH: "+DH+"; DB: "+DB);
		
		// les d�placements instantann�s de la souris sont mis � z�ro
		dx=0;
		dy=0;
		
		g.drawImage(imageDeFond, 0, 0, VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y, this);

		//l'int�gralit� de la map est g�n�r�, une am�lioration possible : faire une clipping
		for(int i=0;i<VariablesGlobales.TAILLE_MAP_X;i++) {
			for(int j=0;j<VariablesGlobales.TAILLE_MAP_Y;j++) {
				if(ville.get(i, j).getBat()!=null) {
					if(ville.get(i,j).getBat() instanceof Habitation) {
						if(ville.get(i,j).getBat().isSousAlimentaion())
							if(((Habitation)(ville.get(i,j).getBat())).isInhabited()){
							g.drawImage(housePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);    
							}else{
								g.drawImage(emptyHousePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);   
							}
						else
							if(((Habitation)(ville.get(i,j).getBat())).isInhabited()){
							g.drawImage(houseWithoutEnergyPicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);    
							}else{
								g.drawImage(emptyHouseWithoutEnergyPicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);    
							}
					}
					else if(ville.get(i,j).getBat() instanceof Route) {
						Route route = (Route) ville.get(i,j).getBat();
						if(route.getSens()=="carrefour") {
							g.drawImage(roadPictureCarrefour,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);
						}
						else if(route.getSens()=="verticale") {
							g.drawImage(roadPictureVerticale,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);
						}
						else if(route.getSens()=="horizontale") {
							g.drawImage(roadPictureHorizontale,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);
						}
					}
					else if(ville.get(i,j).getBat() instanceof CentraleCharbon)
						g.drawImage(centraleCharbonPicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentraleCharbon.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentraleCharbon.sizeY, this);

					else if(ville.get(i,j).getBat() instanceof CentraleEolienne) {
						g.drawImage(centraleEoliennePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentraleEolienne.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentraleEolienne.sizeY, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentraleNucleaire) {
						g.drawImage(centraleNucleairePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentraleNucleaire.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentraleNucleaire.sizeY, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentralePhotovoltaique) {
						g.drawImage(centralePhotovoltaiquePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentralePhotovoltaique.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentralePhotovoltaique.sizeY, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreRecyclageDechetToxique) {
						//g.drawImage(centreRecyclageDechetToxiquePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreRecyclageDechetUsuel) {
						g.drawImage(centreRecyclageDechetUsuelPicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentreRecyclageDechetUsuel.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentreRecyclageDechetUsuel.sizeY, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreEnfouissementTechnique) {
						g.drawImage(centreEnfouissementTechniquePicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*CentreEnfouissementTechnique.sizeX, VariablesGlobales.TAILLE_CASE_Y*CentreEnfouissementTechnique.sizeY, this);
					}
					else if(ville.get(i,j).getBat() instanceof DechargeACielOuvert) {
						g.drawImage(dechargeACielOuvertPicture,i*VariablesGlobales.TAILLE_CASE_X,j*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X*DechargeACielOuvert.sizeX, VariablesGlobales.TAILLE_CASE_Y*DechargeACielOuvert.sizeY, this);
					}
				}
				/*if(modele.getModele(i, j)==1)
					g.drawImage(img1,j*VariablesGlobales.TAILLE_CASE_X,i*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);    
				else
					g.drawImage(img2,j*VariablesGlobales.TAILLE_CASE_X,i*VariablesGlobales.TAILLE_CASE_Y, VariablesGlobales.TAILLE_CASE_X, VariablesGlobales.TAILLE_CASE_Y, this);
				 */
			}
		}

		//l'int�gralit� de la minimap est g�n�r�
		//le fond vert de la minimap
		g.setColor(new Color(78,137,33));
		g.fillRect(DG+0, DH+0, VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y_MINIMAP);
		//les batiments
		for(int i=0;i<VariablesGlobales.TAILLE_MAP_X;i++) {
			for(int j=0;j<VariablesGlobales.TAILLE_MAP_Y;j++) {
				if(ville.get(i, j).getBat()!=null) {
					if(ville.get(i,j).getBat() instanceof Habitation) {
						if(ville.get(i,j).getBat().isSousAlimentaion())
							g.drawImage(housePicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);    
						else
							g.drawImage(houseWithoutEnergyPicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);    
					}
					else if(ville.get(i,j).getBat() instanceof Route) {
						g.drawImage(roadPictureCarrefour,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentraleCharbon)
						g.drawImage(centraleCharbonPicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);

					else if(ville.get(i,j).getBat() instanceof CentraleEolienne) {
						g.drawImage(centraleEoliennePicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentraleNucleaire) {
						g.drawImage(centraleNucleairePicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentralePhotovoltaique) {
						g.drawImage(centralePhotovoltaiquePicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreRecyclageDechetToxique) {
						//g.drawImage(centreRecyclageDechetToxiquePicture,DG+j*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+i*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreRecyclageDechetUsuel) {
						//g.drawImage(centreRecyclageDechetUsuelPicture,DG+j*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+i*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof CentreEnfouissementTechnique) {
						g.drawImage(centreEnfouissementTechniquePicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
					else if(ville.get(i,j).getBat() instanceof DechargeACielOuvert) {
						g.drawImage(dechargeACielOuvertPicture,DG+i*VariablesGlobales.TAILLE_CASE_X_MINIMAP,DH+j*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
					}
				}
				/*if(modele.getModele(i, j)==1)
					g.drawImage(img1, DG+j*VariablesGlobales.TAILLE_CASE_X_MINIMAP, DH+i*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
				else
					g.drawImage(img2, DG+j*VariablesGlobales.TAILLE_CASE_X_MINIMAP, DH+i*VariablesGlobales.TAILLE_CASE_Y_MINIMAP, VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_CASE_Y_MINIMAP, this);
				 */
			}
		}
		//la vue de l'utilisateur de la minimap
		g.setColor(new Color(150,50,0));
		g.drawRect(DG+DG/rapportMapMinimap, DH+DH/rapportMapMinimap, this.tailleEcranX/rapportMapMinimap, this.tailleEcranY/rapportMapMinimap);
		//le rectangle noir autour de la minimap
		g.setColor(new Color(0,0,0));
		g.drawRect(DG+0, DH+0, VariablesGlobales.TAILLE_MAP_X*VariablesGlobales.TAILLE_CASE_X_MINIMAP, VariablesGlobales.TAILLE_MAP_Y*VariablesGlobales.TAILLE_CASE_Y_MINIMAP);
				
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent e) {
		boolean constructible = true;
		
		/*On verifie qu'on a assez d'argent*/
		if(VariablesGlobales.choixBatiment.equals("centraleCharbon") && VariablesGlobales.argent-CentraleCharbon.prix<0 ||
	    	VariablesGlobales.choixBatiment.equals("centraleEolienne") && VariablesGlobales.argent-CentraleEolienne.prix<0 ||
	    	VariablesGlobales.choixBatiment.equals("centraleNucleaire") && VariablesGlobales.argent-CentraleNucleaire.prix<0 ||
	    	VariablesGlobales.choixBatiment.equals("centralePhotovoltaique") && VariablesGlobales.argent-CentralePhotovoltaique.prix<0||
	    	VariablesGlobales.choixBatiment.equals("dechargeACielOuvert") && VariablesGlobales.argent-DechargeACielOuvert.prix<0 ||
	    	VariablesGlobales.choixBatiment.equals("CentreEfouissementTechnique") && VariablesGlobales.argent-CentreEnfouissementTechnique.prix<0||
	    	VariablesGlobales.choixBatiment.equals("centreRecyclageUsuel") && VariablesGlobales.argent-CentreRecyclageDechetUsuel.prix<0)
			
		{
			VariablesGlobales.choixBatiment="";
		}
	if(!VariablesGlobales.choixBatiment.equals(""))
	{
		int posX = (int) ((e.getPoint().getX()+DG)/VariablesGlobales.TAILLE_CASE_X);
		int posY = (int) ((e.getPoint().getY()+DH)/VariablesGlobales.TAILLE_CASE_Y);
		
	for(int i = 0 ; i < ville.getBatimentTab().length;++i)
	{
		Batiment[] blist = ville.getBatimentTab()[i];
		for(int j = 0 ; j < blist.length ; ++j)
		{
			/*On verifie que rien n'est deja construit*/
			Batiment b = blist[j];
			if(b != null &&
				posX>b.getPosX()-b.getSizeX() &&
		    	posX<b.getPosX()+b.getSizeX() &&
		    	posY>b.getPosY()-b.getSizeY() &&
		    	posY<b.getPosY()+b.getSizeY()){
				
				constructible = false;
				if(constructible == false && VariablesGlobales.choixBatiment.equals("detruire") && !(b instanceof Habitation)){
					
					ville.setBatimentTabi(i, j, null);
					ville.rafraichirInformations();
				}
			}
			
		}
	}
	
	if(constructible)
	{
	construireBatiment(e.getPoint());
	}
	

	if(e.getButton()==MouseEvent.BUTTON1)
	{
	VariablesGlobales.choixBatiment = "";
	}
	
	}
	

	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		moussePressedBefore = false;
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		//calcul les d�placements instantann�s de la souris
		if(moussePressedBefore) {
			mx = e.getPoint().x;
			my = e.getPoint().y;

			dx = lmx-mx;
			dy = lmy-my;

			repaint();

			lmx=mx;
			lmy=my;
		}
		else {
			moussePressedBefore = true;
			lmx = e.getPoint().x;
			lmy = e.getPoint().y;
		}
        
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub

	}    
	
	protected void construireBatiment(Point posCurseur) {

		int posX = (int) ((posCurseur.getX()+DG)/VariablesGlobales.TAILLE_CASE_X);
		int posY = (int) ((posCurseur.getY()+DH)/VariablesGlobales.TAILLE_CASE_Y);
	if(VariablesGlobales.choixBatiment.equals("centraleCharbon"))
	{		
		ville.addBatiment(new CentraleCharbon(posX, posY));
		ville.changeArgentValue(-CentraleCharbon.prix);

	}else if (VariablesGlobales.choixBatiment.equals("centraleEolienne")){
		ville.addBatiment(new CentraleEolienne(posX, posY));
		ville.changeArgentValue(-CentraleEolienne.prix);
		
	}else if (VariablesGlobales.choixBatiment.equals("centraleNucleaire")){
		ville.addBatiment(new CentraleNucleaire(posX, posY));
		ville.changeArgentValue(-CentraleNucleaire.prix);
		
	}else if (VariablesGlobales.choixBatiment.equals("centralePhotovoltaique")){
		ville.addBatiment(new CentralePhotovoltaique(posX, posY));
		ville.changeArgentValue(-CentralePhotovoltaique.prix);
		
	}else if (VariablesGlobales.choixBatiment.equals("dechargeACielOuvert")){
		ville.addBatiment(new DechargeACielOuvert(posX, posY));
		ville.changeArgentValue(-DechargeACielOuvert.prix);
		
	}else if (VariablesGlobales.choixBatiment.equals("CentreEnfouissementTechnique")){
		ville.addBatiment(new CentreEnfouissementTechnique(posX, posY));
		ville.changeArgentValue(-CentreEnfouissementTechnique.prix);
		
	}else if (VariablesGlobales.choixBatiment.equals("centreRecyclageUsuel")){
		ville.addBatiment(new CentreRecyclageDechetUsuel(posX, posY));
		ville.changeArgentValue(-CentreRecyclageDechetUsuel.prix);		
	}
	
}

}